package uml;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
//import java.lang.String;


import uml.mPackage;
import uml.JavaParser;
import uml.JavaCharStream;
import uml.JavaParserTokenManager;
import uml.ParseException;
import uml.TokenMgrError;

/**
 *
 * @author Robert & Sejk
 */
public class Main {

     public Vector<mPackage> V_package ;


     public Main( String[] args){

         V_package = new Vector<mPackage>();

        boolean mBool = true;
        boolean NewMethod = true;

        String[] args2 = {};

        String mNumber = null;

        JavaParser parser = null;

        parser.Start(args);

        System.out.println("JEST");

        /*for (int i=0;i<parser.D_ata.size();i++){
            if(mBool) {
                System.out.print(parser.D_ata.elementAt(i));
            } else {
                System.out.println(" "+parser.D_ata.elementAt(i));
            }
            mBool=!mBool;
        }*/

        for(int i=0; i<parser.wektor.size(); i++) {
            System.out.println("TO: "+parser.wektor.elementAt(i));
        }
        //System.out.print("\n");
        /*for(int i=0; i<parser.wektor.size(); i++) {
            System.out.println("TO: "+parser.wektor.elementAt(i));
        }*/

        int numberPackage=0;
        //int numberClass=0;
        boolean newPackage = true;
        for (int i=0;i<parser.wektor.size();i++){
            if(mBool) {
                mNumber = parser.wektor.elementAt(i);
                //System.out. println("Dodaje mBool: "+mNumber);
            }
            else {
                String nazwa = parser.wektor.elementAt(i);
                if(mNumber.equals("11")) {
                    for(int e=0; e<V_package.size(); e++) {
                        if(nazwa.equals(V_package.elementAt(e).name)) {
                            numberPackage = e;
                            newPackage = false;
                        }
                    }
                    if(newPackage) {
                        mPackage zzz = new mPackage();
                        zzz.name = nazwa;
                        V_package.add(zzz);
                        numberPackage = V_package.size()-1;
                    }
                    //numberPackage = V_package.size()-1;
                    System.out. println("11: "+nazwa+" "+numberPackage);
                } else if(mNumber.equals("21")) {
                    mClass xxx = new mClass();
                    xxx.name = nazwa;
                    xxx.pack = V_package.elementAt(numberPackage);
                    System.out. println("21: "+nazwa);
                    V_package.elementAt(numberPackage).V_class.add(xxx);
                } else if(mNumber.equals("31")) {
                    mTypes ccc = new mTypes();
                    ccc.type = nazwa;
                    System.out. println("31: "+nazwa);
                    V_package.elementAt(numberPackage).V_class.lastElement().V_types.add(ccc);
                } else if(mNumber.equals("32")) {
                    //mTypes ccc = new mTypes();
                    V_package.elementAt(numberPackage).V_class.lastElement().V_types.lastElement().name = nazwa;
                    //ccc.name = nazwa;
                    System.out. println("32: "+nazwa);
                    //V_package.elementAt(numberPackage).V_class.lastElement().V_types.add(ccc);
                } else if(mNumber.equals("41")) {
                    if(NewMethod) {
                        mMethod vvv = new mMethod();
                        vvv.clas = V_package.elementAt(numberPackage).V_class.lastElement();
                        V_package.elementAt(numberPackage).V_class.lastElement().V_method.add(vvv);
                        NewMethod = false;
                    }
                    //mMethod vvv = new mMethod();
                    V_package.elementAt(numberPackage).V_class.lastElement().V_method.lastElement().mreturn = nazwa;
                    System.out. println("41: "+nazwa);
                    NewMethod = true;
                    //V_package.elementAt(numberPackage).V_class.lastElement().V_method.add(vvv);
                } else if(mNumber.equals("42")) {
                    //mMethod vvv = new mMethod();
                    V_package.elementAt(numberPackage).V_class.lastElement().V_method.lastElement().name = nazwa;
                    //vvv.name = nazwa;
                    System.out. println("42: "+nazwa);
                    //V_package.elementAt(numberPackage).V_class.lastElement().V_method.add(vvv);
                } else if(mNumber.equals("51")) {
                    if(NewMethod) {
                        mMethod vvv = new mMethod();
                        vvv.clas = V_package.elementAt(numberPackage).V_class.lastElement();
                        V_package.elementAt(numberPackage).V_class.lastElement().V_method.add(vvv);
                        NewMethod = false;
                    }
                    mArguments bbb = new mArguments();
                    bbb.type = nazwa;
                    bbb.metod = V_package.elementAt(numberPackage).V_class.lastElement().V_method.lastElement();
                    V_package.elementAt(numberPackage).V_class.lastElement().V_method.lastElement().V_arguments.add(bbb);
                    System.out. println("51: "+nazwa);
                } else if(mNumber.equals("52")) {
                    //mMethod vvv = new mMethod();
                    System.out. println("52: "+nazwa);
                    V_package.elementAt(numberPackage).V_class.lastElement().V_method.lastElement().V_arguments.lastElement().name = nazwa;
                    //vvv.name = nazwa;
                    //V_package.elementAt(numberPackage).V_class.lastElement().V_method.add(vvv);
                }
            }
            mBool=!mBool;
        }



    }





    public static void main(String[] args) throws ParseException {


        String pliki[] = new String[2];
	pliki[0] = "sfera.java";
        pliki[1] = "start.java";
        //pliki[2] = "Main.java"


        new Main(pliki);



        /*

        for(int i=0; i<V_package.size(); i++) {
            //System.out.println("WIELKOSC(package): " + V_package.size());

            System.out.println("Nazwa package: "+V_package.elementAt(i).name);


            for(int j=0; j<V_package.elementAt(i).V_class.size(); j++) {

                System.out.println("Nazwa Klasy: "+V_package.elementAt(i).V_class.elementAt(j).name);

                //System.out.println("WIELKOSC(method): " + V_package.elementAt(i).V_class.size());
                //System.out.println("WIELKOSC(method): " + V_package.elementAt(i).V_class.elementAt(j).V_method.size());
                for(int k=0; k<(V_package.elementAt(i).V_class.elementAt(j).V_method.size()); k++) {

                    System.out.println("Nazwa metody: "+V_package.elementAt(i).V_class.elementAt(j).V_method.elementAt(k).name);
                    //System.out.println("buba");
                    String aaaaa=V_package.elementAt(i).V_class.elementAt(j).V_method.elementAt(k).name;
                    //System.out.println(aaaaa);
                }
                //System.out.println("Po forze");
            }
        }*/

        /*
        for(int i=0; i<V_package.size(); i++) {
            System.out.println(V_package.elementAt(i).name);
            //System.out.println("WIELKOSC(package): " + V_package.size());
            for(int j=0; j<V_package.elementAt(i).V_class.size(); j++) {
                System.out.println(V_package.elementAt(i).V_class.elementAt(j).name);
                //System.out.println("WIELKOSC(method): " + V_package.elementAt(i).V_class.size());
                //System.out.println("WIELKOSC(method): " + V_package.elementAt(i).V_class.elementAt(j).V_method.size());
                for(int k=0; k<(V_package.elementAt(i).V_class.elementAt(j).V_method.size()); k++) {
                    //System.out.println("buba");
                    //String bbbb=V_package.elementAt(i).V_class.elementAt(j).V_types.elementAt(k).type;
                    //System.out.println(bbbb);
                    System.out.println(V_package.elementAt(i).V_class.elementAt(j).V_method.elementAt(k).name);
                    //System.out.println(V_package.elementAt(i).V_class.elementAt(j).V_method.elementAt(k).clas.name);
                }
                //System.out.println("Po forze");
            }
        }
*/
        //System.out.println()
        /*System.out.println("Wszystko co wyszlo z parsera dodaje do wectora stringow");
        for (int i=0;i<parser.v.size();i++){
            System.out.println(parser.v.elementAt(i));
        }*/
    }
}
